package com.demo.java.OD601_650.OD620;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【羊、狼、农夫过河(A卷-200分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146883428
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 读取输入，分别是羊的数量M，狼的数量N，船的容量X
        int M = in.nextInt();  // 羊的数量
        int N = in.nextInt();  // 狼的数量
        int X = in.nextInt();  // 船的容量

        // 如果起始岸边羊的数量小于等于狼，羊会被吃掉，无法开始
        if (M <= N) {
            System.out.println(0);
            return;
        }

        // 情况一：狼的数量小于船的容量
        if (N < X) {
            // 如果狼的数量比船的一半还少，则可以一次运送走所有狼
            if (N < X / 2.0) {
                M -= (X - N); // 搭配一些羊和狼一起运走
            }
            // 计算剩余羊需要运送的次数 + 第一次狼和羊一起的运输
            System.out.println((int) Math.ceil(M * 1.0 / X) + 1);
            return;
        }

        // 情况二：狼的数量较多，不能一次运完，要采用策略运送
        // 初始化状态：
        N -= (X - 1); // 第一次运走了X-1只狼
        int N_opposite = X - 1;
        M -= X;  // 第一次运送走了X只羊
        int M_opposite = X;

        int result = 2; // 初始两次：去一次、回一次

        // 后续每次运送安排：羊比狼多1
        int sheep_boat = (int) Math.ceil(X / 2.0) + (X % 2 == 0 ? 1 : 0);
        int wolf_boat = X - sheep_boat;

        while (M > 0) {
            // 如果本轮可以继续运送
            if (M - sheep_boat > N - wolf_boat || (M == sheep_boat && N == wolf_boat)) {
                // 从当前岸运走
                M -= sheep_boat;
                M_opposite += sheep_boat;
                N -= wolf_boat;
                N_opposite += wolf_boat;
                result++;
            } else {
                // 无法直接运送，需要从对岸带狼回来
                int tmp = M_opposite - N_opposite - 1;
                if (tmp <= 0) {
                    System.out.println(0);
                    return;
                }
                N -= tmp;
                N_opposite += tmp;
                result++;
            }
        }
        System.out.println(result);
    }
}